package com.freedom.ums.member.infrastructure.persistence.pojo.bo;

import com.freedom.common.core.constant.SystemConstant;
import com.freedom.common.core.enums.ums.MemberStatusEnum;
import com.freedom.common.core.enums.ums.PartnerGradeEnum;
import com.freedom.common.core.enums.ums.VipGradeEnum;
import com.freedom.common.framework.util.IPUtil;
import com.freedom.common.framework.util.RequestUtils;
import com.freedom.ums.member.infrastructure.enums.GenderEnum;
import com.freedom.ums.member.infrastructure.utils.NickNameUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Date;


/**
 * 会员BO
 * @author ysy
 */
@ApiModel(description="会员表")
@Data
public class MemberBO {
    /**
    * 会员id
    */
    @ApiModelProperty(value="会员id")
    private Integer id;

    /**
    * 昵称
    */
    @ApiModelProperty(value="昵称")
    private String nickName;

    /**
    * 区号
    */
    @ApiModelProperty(value="区号")
    private String areaCode;

    /**
    * 手机号码
    */
    @ApiModelProperty(value="手机号码")
    private String mobile;

    /**
    * 会员VIP等级(0:普通用户 1:VIP用户)
    */
    @ApiModelProperty(value="会员VIP等级(0:普通用户 1:VIP用户)")
    private Integer vipGrade;

    /**
    * 合作等级(1:普通合伙人 2:中级合伙人 3:高级合伙人)
    */
    @ApiModelProperty(value="合作等级(1:普通合伙人 2:中级合伙人 3:高级合伙人)")
    private Integer partnerGrade;

    /**
    * 邀请码
    */
    @ApiModelProperty(value="邀请码")
    private String inviteCode;

    /**
    * 邀请人Id
    */
    @ApiModelProperty(value="邀请人Id")
    private Integer inviteId;

    /**
    * 头像url
    */
    @ApiModelProperty(value="头像url")
    private String avatar;

    /**
    * 性别 (性别 0:保密,1:男,2:女)
    */
    @ApiModelProperty(value="性别 (性别 0:保密,1:男,2:女)")
    private Integer gender;

    /**
    * 生日
    */
    @ApiModelProperty(value="生日")
    private Date birth;

    /**
    * 省
    */
    @ApiModelProperty(value="省")
    private String province;

    /**
    * 市
    */
    @ApiModelProperty(value="市")
    private String city;

    /**
    * 区
    */
    @ApiModelProperty(value="区")
    private String area;

    /**
    * 注册IP
    */
    @ApiModelProperty(value="注册IP")
    private String registeredIp;

    /**
    * 注册时间
    */
    @ApiModelProperty(value="注册时间")
    private Date registeredTime;

    /**
    * 最近登录的IP
    */
    @ApiModelProperty(value="最近登录的IP")
    private String lastLoginIp;

    /**
    * 最后一次登录时间
    */
    @ApiModelProperty(value="最后一次登录时间")
    private Date lastLoginTime;

    /**
    * 微信号
    */
    @ApiModelProperty(value="微信号")
    private String wechatNo;

    /**
    * 微信唯一标识id
    */
    @ApiModelProperty(value="微信唯一标识id")
    private String openId;

    /**
    * 店铺id
    */
    @ApiModelProperty(value="店铺id")
    private Integer storeId;

    /**
    * 是否开店
    */
    @ApiModelProperty(value="是否开店")
    private Boolean haveStore;

    /**
    * 状态 1:可用 2:禁用 3:注销
    */
    @ApiModelProperty(value="状态 1:可用 2:禁用 3:注销")
    private Integer status;

    /**
    * 用户备注
    */
    @ApiModelProperty(value="用户备注")
    private String remark;

    public MemberBO() {

    }

    public MemberBO create(String account, String inviteCode) {
        this.mobile = account;
        this.areaCode = SystemConstant.DEFAULT_AREA_CODE;
        this.nickName = NickNameUtil.getNickName();
        this.inviteCode = inviteCode;
        this.status = MemberStatusEnum.NORMAL.getValue();
        this.vipGrade = VipGradeEnum.VIP_0.getValue();
        this.partnerGrade = PartnerGradeEnum.PARTNER_GENERAL.getValue();
        this.gender = GenderEnum.UNKNOWN.getValue();

        String ipAddr = IPUtil.getIpAddr(RequestUtils.getRequest());
        this.registeredIp = ipAddr;
        this.lastLoginIp = ipAddr;
        Date now = new Date();
        this.registeredTime = now;
        this.lastLoginTime = now;
        this.birth = now;
        this.haveStore = Boolean.FALSE;
        return this;
    }

}